package util

import (
	"crypto/tls"
	"encoding/json"
	"fmt"
	"gitee.com/TTRR/go-xb-utils/dto"
	"github.com/go-resty/resty/v2"
	"log"
)

func GetDataByHttpGet[T any](url, urlmore string) (*T, error) {
	baseUrl := url + "/api/" + urlmore
	// 创建一个新的Resty客户端
	client := resty.New()
	// 发起一个GET请求并传入字符串数组作为查询参数
	client.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})
	resp, err := client.R().
		SetHeader("Accept", "application/json").
		Get(baseUrl)
	if err != nil {
		log.Printf(err.Error())
		return nil, err
	} else {
		// 打印响应体字符串
		fmt.Println(resp.String()) // 使用resp.String()直接获取响应体字符串
		var result dto.ApiResponse[T]
		err2 := json.Unmarshal(resp.Body(), &result)
		if err2 != nil {
			log.Printf("Error in Unmarshal: %v\n", err2)

			return nil, err2
		} else {
			return &result.Data, nil
		}
	}

}

func GetDataByHttpPost[T1 any, T2 any](url, urlmore string, body T1) (*T2, error) {
	baseUrl := url + "/api/" + urlmore
	// 创建一个新的Resty客户端
	client := resty.New()
	// 发起一个GET请求并传入字符串数组作为查询参数
	client.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})
	resp, err := client.R().
		SetBody(body).
		SetHeader("Accept", "application/json").
		Post(baseUrl)
	if err != nil {
		log.Printf(err.Error())
		return nil, err
	} else {
		// 打印响应体字符串
		///fmt.Println(resp.String()) // 使用resp.String()直接获取响应体字符串
		var result dto.ApiResponse[T2]
		err2 := json.Unmarshal(resp.Body(), &result)
		if err2 != nil {
			log.Printf("Error in Unmarshal: %v\n", err2)
			return nil, err
		} else {
			return &result.Data, nil
		}
	}
}
